সার্ভলেট (Servlet) হলো জাভা টেকনোলজির একটি গুরুত্বপূর্ণ অংশ, যা সার্ভার-সাইড প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়। এটি একটি জাভা-ক্লাস যা HTTP অনুরোধ এবং প্রতিক্রিয়া পরিচালনা করতে পারে। সার্ভলেট এবং ওয়েবসকেট (WebSocket) একত্রে ব্যবহার করে, আপনি রিয়েল-টাইম কমিউনিকেশনের জন্য কার্যকর সমাধান তৈরি করতে পারেন।
নিচে ওয়েবসকেট এবং সার্ভলেট ব্যবহারের মাধ্যমে রিয়েল-টাইম কমিউনিকেশনের একটি ধারণা দেওয়া হলো:
WebSocket কি?
- WebSocket হলো একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্বিমুখী (bi-directional) এবং রিয়েল-টাইম কমিউনিকেশন সাপোর্ট করে।
- HTTP এর মতো টেক্সট-ভিত্তিক নয়, এটি বাইনারি ডেটা ট্রান্সফারেরও সাপোর্ট দেয়।
- এটি একটি একক TCP সংযোগ ব্যবহার করে কার্যক্রম পরিচালনা করে।
Java EE-তে WebSocket এবং Servlet ব্যবহার
Java EE বা Jakarta EE-তে WebSocket API বিল্ট-ইন রয়েছে, যা WebSocket এন্ডপয়েন্ট তৈরি করার জন্য সহজ করে তোলে।
নিচে একটি উদাহরণ দেখানো হলো যেখানে সার্ভলেট এবং ওয়েবসকেট একত্রে ব্যবহার করে রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করা হয়েছে:
Step 1: Maven ডিপেন্ডেন্সি
Maven প্রজেক্টে javax.websocket বা jakarta.websocket ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
Step 2: WebSocket ServerEndpoint তৈরি করা
একটি WebSocket এন্ডপয়েন্ট তৈরি করতে হবে যা ক্লায়েন্টের সাথে সংযোগ স্থাপন করবে।
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
@ServerEndpoint("/chat")
public class ChatWebSocket {
private static final CopyOnWriteArraySet<ChatWebSocket> connections = new CopyOnWriteArraySet<>();
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
connections.add(this);
System.out.println("New connection: " + session.getId());
}
@OnMessage
public void onMessage(String message) {
System.out.println("Message received: " + message);
for (ChatWebSocket client : connections) {
try {
client.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@OnClose
public void onClose() {
connections.remove(this);
System.out.println("Connection closed: " + session.getId());
}
@OnError
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
}
Step 3: Servlet তৈরি করা (অপশনাল)
সার্ভলেট ক্লায়েন্টকে WebSocket URL বা অন্যান্য স্ট্যাটিক/ডায়নামিক ডেটা পরিবেশন করতে পারে।
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/chat-servlet")
public class ChatServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.getWriter().write("<h1>Welcome to the Chat Application</h1>");
response.getWriter().write("<p>Connect to the WebSocket endpoint at <code>ws://yourserver/chat</code></p>");
}
}
Step 4: Client Side WebSocket Implementation
ক্লায়েন্ট সাইডে, JavaScript দিয়ে WebSocket সংযোগ করা হবে:
<!DOCTYPE html>
<html>
<head>
<title>Chat Application</title>
</head>
<body>
<h1>Chat Room</h1>
<textarea id="chat" rows="10" cols="50" readonly></textarea><br>
<input type="text" id="message" placeholder="Type a message">
<button onclick="sendMessage()">Send</button>
<script>
const chat = document.getElementById("chat");
const messageInput = document.getElementById("message");
const socket = new WebSocket("ws://localhost:8080/chat");
socket.onmessage = function (event) {
chat.value += event.data + "\n";
};
function sendMessage() {
const message = messageInput.value;
socket.send(message);
messageInput.value = "";
}
</script>
</body>
</html>
Step 5: ডিপ্লয় এবং টেস্ট
- এই প্রজেক্টটিকে একটি সার্ভলেট-সমর্থিত সার্ভারে (যেমন Tomcat, Jetty) ডিপ্লয় করুন।
- ব্রাউজারে অ্যাপ্লিকেশনটি চালু করুন এবং চ্যাট ফিচার পরীক্ষা করুন।
উপকারিতা
- সার্ভলেট দিয়ে WebSocket এন্ডপয়েন্ট তৈরি করা সহজ।
- দ্বিমুখী ডেটা ট্রান্সফারের মাধ্যমে রিয়েল-টাইম ফিচার ইমপ্লিমেন্ট করা যায়।
- HTTP এর চেয়ে কম ওভারহেড থাকে, যা রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য উপযুক্ত।
এই উদাহরণটি আরও কাস্টমাইজ করে বাস্তব অ্যাপ্লিকেশন তৈরিতে ব্যবহার করতে পারেন।